﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Proxy;
using SIM.Geo.UI.Movil;
using SIM.Geo.UI.Movil.Clases;
using SIM.Geo.UI.Movil.Clases.DTO;
using System.Text;
using SIM.Util;

namespace SIM.Geo.UI.Movil.Controllers
{
    public class LitologiaController : BaseController
    {
        List<LitologiaAlteracionesResponse> listaAlteraciones = new List<LitologiaAlteracionesResponse>();
        List<LitologiaMineralesResponse> listaMinerales = new List<LitologiaMineralesResponse>();
        private const string SESSION_ALTERACIONES = "Alteraciones";
        private const string SESSION_MINERALES = "Minerales";

        public JsonResult CerrarPopUp()
        {
            Session.Remove(SESSION_ALTERACIONES);
            Session.Remove(SESSION_MINERALES);
            return Json(new Resultado() { result = 1, message = "OK" }, JsonRequestBehavior.AllowGet);
        }
        //GET: /Litologia/
        public ActionResult Index(int idSondaje)
        {
            Session.Remove(SESSION_ALTERACIONES);
            Session.Remove(SESSION_MINERALES);

            return View();
        }

        public JsonResult Listar(int idSondaje)
        {
            using (SELitologiaClient proxy = new SELitologiaClient())
            {
                var lista = proxy.BuscarLitologiaPorSondaje1(idSondaje);
                return Json(lista, JsonRequestBehavior.AllowGet);
            }
        }
        /// <summary>
        /// Add alteracion en session
        /// </summary>
        /// <param name="idSondaje"></param>
        /// <param name="idLitologia"></param>
        /// <param name="idGradoAlteracion"></param>
        /// <param name="idTipoAlteracion"></param>
        /// <param name="gradoAlteracionDescripcion"></param>
        /// <param name="tipoAlteracionDescripcion"></param>
        /// <returns></returns>
        [HttpPost]
        public JsonResult addAlteracion(int idSondaje, string idLitologia, int idGradoAlteracion, int idTipoAlteracion, string gradoAlteracionDescripcion, string tipoAlteracionDescripcion)
        {
            Resultado retorno = new Resultado();

            try
            {
                bool flag_exite = true;
                listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                if (listaAlteraciones == null) listaAlteraciones = new List<LitologiaAlteracionesResponse>();
                foreach (var detalle in listaAlteraciones)
                {
                    if (detalle.CodigoTipoAlteracionLitologica == idTipoAlteracion)// && detalle.CodigoGradoFracturacion == idGradoAlteracion)
                    {
                        //Si encuentra en detalle ya no se agrega
                        flag_exite = false;
                        retorno.message = "Ya se agregó el tipo Alteración";
                        retorno.result = 0;
                        break; //Agregado por Edgar
                    }
                }
                if (flag_exite)
                {
                    LitologiaAlteracionesResponse item = new LitologiaAlteracionesResponse();
                    item.Orden = listaAlteraciones.Count + 1;
                    item.CodigoGradoFracturacion = idGradoAlteracion;
                    item.DescripcionGradoFracturacion = gradoAlteracionDescripcion;
                    item.CodigoSondaje = idSondaje;
                    item.CodigoLitologia = idLitologia;
                    item.CodigoTipoAlteracionLitologica = idTipoAlteracion;
                    item.DescripcionTipoAlteracion = tipoAlteracionDescripcion;
                    listaAlteraciones.Add(item);

                    Session[SESSION_ALTERACIONES] = listaAlteraciones;
                    retorno.message = "";
                    retorno.result = 1;
                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:addAlteración", this.UserLogon.CodigoUsuario, ex);

            }
            return Json(retorno, JsonRequestBehavior.AllowGet);


        }

        public JsonResult delAddAlteracion()
        {
            int idOrden = 0;

            if (Request.QueryString["Orden"] != null)
            {
                idOrden = Convert.ToInt32(Request.QueryString["Orden"]);
            }
            Resultado retorno = new Resultado();
            try
            {
                listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                if (listaAlteraciones != null)
                {
                    LitologiaAlteracionesResponse objDel = null;
                    foreach (var item in listaAlteraciones)
                    {
                        if (item.Orden == idOrden)
                        {
                            //Si encuentra en detalle ya no se agrega
                            objDel = item;
                        }
                    }

                    if (objDel != null)
                    {
                        listaAlteraciones.Remove(objDel);
                    }

                }
                Session[SESSION_ALTERACIONES] = listaAlteraciones;

                retorno.message = "";
                retorno.result = 1;

            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:delAlteración", this.UserLogon.CodigoUsuario, ex);
            }
            return Json(retorno, JsonRequestBehavior.AllowGet);


        }

        [HttpPost]
        public JsonResult addMineral(int idSondaje,
            string idLitologia,
            int idMineral,
            int idMineralCantidad,
            int idMineralTextura,
            string descripcionMineral,
            string descripcionMineralCantidad,
            string descripcionMineralTextura)
        {
            Resultado retorno = new Resultado();

            try
            {
                bool flag_exite = true;
                listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                if (listaMinerales == null) listaMinerales = new List<LitologiaMineralesResponse>();
                foreach (var detalle in listaMinerales)
                {
                    if (detalle.CodigoMineral == idMineral && detalle.CodigoMineralCantidad == idMineralCantidad && detalle.CodigoMineralTextura == idMineralTextura)
                    {
                        //Si encuentra en detalle ya no se agrega
                        flag_exite = false;
                        Session[SESSION_MINERALES] = listaMinerales;
                        retorno.message = "Ya se agregó el Mineral seleccionado.";
                        retorno.result = 0;
                        break; //Agregado por Edgar
                    }
                }
                if (flag_exite)
                {
                    LitologiaMineralesResponse item = new LitologiaMineralesResponse();
                    item.Orden = (short)(listaMinerales.Count + 1);
                    item.CodigoMineralCantidad = idMineralCantidad;
                    item.CodigoMineralTextura = idMineralTextura;
                    item.CodigoSondaje = idSondaje;
                    item.CodigoLitologia = idLitologia;
                    item.CodigoMineral = idMineral;
                    item.DescripcionMineralCantidad = descripcionMineralCantidad;
                    item.DescripcionMineralTextura = descripcionMineralTextura;
                    item.DescripcionMineral = descripcionMineral;
                    listaMinerales.Add(item);


                    Session[SESSION_MINERALES] = listaMinerales;
                    retorno.message = "";
                    retorno.result = 1;
                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:addMineral", this.UserLogon.CodigoUsuario, ex);

            }
            return Json(retorno, JsonRequestBehavior.AllowGet);


        }
        public JsonResult delAddMineral()
        {
            int idOrden = 0;

            if (Request.QueryString["Orden"] != null)
            {
                idOrden = Convert.ToInt32(Request.QueryString["Orden"]);
            }

            Resultado retorno = new Resultado();

            try
            {
                listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                if (listaMinerales != null)
                {
                    LitologiaMineralesResponse objDel = null;
                    foreach (var item in listaMinerales)
                    {
                        if (item.Orden == idOrden)
                        {
                            //Si encuentra en detalle ya no se agrega
                            objDel = item;
                        }
                    }

                    if (objDel != null)
                    {
                        listaMinerales.Remove(objDel);
                    }

                }
                Session[SESSION_MINERALES] = listaMinerales;

                retorno.message = "";
                retorno.result = 1;

            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:delMineral", this.UserLogon.CodigoUsuario, ex);

            }
            return Json(retorno, JsonRequestBehavior.AllowGet);


        }
        public JsonResult ListaAlteracionNeo()
        {
            listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
            return Json(listaAlteraciones, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListaMineralNeo()
        {
            listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
            return Json(listaMinerales, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ListaAlteracion(int idSondaje, string idLitologia)
        {
            listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
            return Json(listaAlteraciones, JsonRequestBehavior.AllowGet);
            //using (SELitologiaAlteracionesClient proxy = new SELitologiaAlteracionesClient())
            //{
            //    var listaAlteracion = proxy.BuscarLitologiaAlteraciones(idSondaje,idLitologia);
            //    Session[SESSION_ALTERACIONES] = listaAlteraciones;
            //    return Json(listaAlteracion, JsonRequestBehavior.AllowGet);


            //}
        }

        public JsonResult ListaMineral(int idSondaje, string idLitologia)
        {
            listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
            return Json(listaMinerales, JsonRequestBehavior.AllowGet);
            //using (SELitologiaMineralesClient proxy = new SELitologiaMineralesClient())
            //{
            //    var listaMineral = proxy.BuscarLitologiaMinerales(idSondaje,idLitologia);
            //    Session[SESSION_MINERALES] = listaMinerales;
            //    return Json(listaMineral, JsonRequestBehavior.AllowGet);
            //}
        }



        //GET : /MUESTRA/DETAILS/
        public ActionResult Details(int id)
        {

            return View();
        }

        //GET: /Muestra/Create

        public ActionResult Create()
        {

            return View();
            //return View();
        }

        /// <summary>
        /// Validación unica para insertar y modificar
        /// Agregado: por Edgar
        /// </summary>
        /// <param name="entidad"></param>
        /// <param name="sb"></param>
        /// <returns></returns>
        private bool Validar(Litologia entidad, ref  StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                if (entidad.Desde >= entidad.Hasta)
                {
                    sb.AppendLine(Constantes.MensajeGenerico.MSG_VALIDA_RANGO);
                    retorno = false;
                }

                //Valido si registro Alteraciones
                listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                if (listaAlteraciones == null || listaAlteraciones.Count == 0)
                {
                    sb.AppendLine("No ha registrado ningúna Alteración. ");
                    retorno = false;
                }

                if (Convert.ToInt32(entidad.CodigoTipoRoca) == 0)
                {
                    //Valido si registro Mineral
                    listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                    if (listaMinerales == null || listaMinerales.Count == 0)
                    {
                        sb.AppendLine("No ha registrado ningúna Mineral. ");
                        retorno = false;
                    }

                }
                else
                {
                    if (Convert.ToInt32(entidad.CodigoTexturaRoca) == 0)
                    {
                        sb.AppendLine("No ha seleccionado El campo Textura. ");
                        retorno = false;
                    }
                    if (Convert.ToInt32(entidad.CodigoTipoRocaFracturacion) == 0)
                    {
                        sb.AppendLine("No ha seleccionado El campo Fracturación. ");
                        retorno = false;
                    }
                    if (Convert.ToInt32(entidad.CodigoColorRoca) == 0)
                    {
                        sb.AppendLine("No ha seleccionado El campo Color. ");
                        retorno = false;
                    }

                }

                using (var proxy = new SELitologiaClient("BasicHttpBinding_ISELitologia"))
                {
                    int resultInterseccion = proxy.ValidarInterseccionLitologia(entidad.CodigoSondaje, entidad.CodigoLitologia, entidad.Desde, entidad.Hasta);
                    if (resultInterseccion == 1)
                    {
                        sb.AppendLine("Existe intersección o espacios con rangos ingresados.");
                        retorno = false;
                    }
                }

            }
            catch (Exception ex)
            {
                retorno = false;
                //retorno.message = ex.Message;
                Logger.Error("Litologia Controller:Validar", this.UserLogon.CodigoUsuario, ex);
            }
            return retorno;
        }

        //POST: //Muestra /Create

        [HttpPost]
        public JsonResult Create(Litologia entidad)
        {
            Resultado retorno = new Resultado();
            try
            {
                bool flag_exito = true;
                
                //Modificado por Edgar, la validación debe ser unico para insertar y modificar
                StringBuilder sb = new StringBuilder();
                if (!this.Validar(entidad, ref sb))
                {
                    retorno.result = 0;
                    retorno.message = sb.ToString();
                    flag_exito = false;
                }
                
                //Hasta aqui es la validación

                var objLito = entidad;
                if (flag_exito)
                {
                    Litologia litologia = new Litologia();

                    litologia.CodigoSondaje = objLito.CodigoSondaje;
                    litologia.CodigoLitologia = objLito.CodigoLitologia;
                    litologia.Desde = objLito.Desde;
                    litologia.Hasta = objLito.Hasta;
                    litologia.Descripcion = objLito.Descripcion;
                    litologia.Angulo = objLito.Angulo;
                    litologia.InterpretaTipoAlteracion = objLito.InterpretaTipoAlteracion == null ? string.Empty : objLito.InterpretaTipoAlteracion;
                    litologia.InterpretaCantidadMineral = objLito.InterpretaCantidadMineral == null ? string.Empty : objLito.InterpretaCantidadMineral;
                    litologia.InterpretaGradoAlteracion = objLito.InterpretaGradoAlteracion == null ? string.Empty : objLito.InterpretaGradoAlteracion;
                    litologia.InterpretaMinerales = objLito.InterpretaMinerales == null ? string.Empty : objLito.InterpretaMinerales;
                    litologia.InterpretaTexturaMineral = objLito.InterpretaTexturaMineral == null ? string.Empty : objLito.InterpretaTexturaMineral;

                    if (Convert.ToInt32(objLito.CodigoTipoRoca) != 0) //Modificado por Edgar
                    {
                        litologia.CodigoTipoRoca = objLito.CodigoTipoRoca;
                    }
                    else
                    {
                        litologia.CodigoTipoRoca = null;
                    }

                    if (Convert.ToInt32(objLito.CodigoTipoRocaFracturacion) != 0) //Modificado por Edgar
                    {
                        litologia.CodigoTipoRocaFracturacion = objLito.CodigoTipoRocaFracturacion;
                    }
                    else
                    {
                        litologia.CodigoTipoRocaFracturacion = null;
                    }
                    if (Convert.ToInt32(objLito.CodigoTexturaRoca) != 0) //Modificado por Edgar
                    {
                        litologia.CodigoTexturaRoca = objLito.CodigoTexturaRoca;
                    }
                    else
                    {
                        litologia.CodigoTexturaRoca = null;
                    }

                    if (Convert.ToInt32(objLito.CodigoColorRoca) != 0) //Modificado por Edgar
                    {
                        litologia.CodigoColorRoca = objLito.CodigoColorRoca;
                    }
                    else
                    {
                        litologia.CodigoColorRoca = null;
                    }


                    litologia.CodigoGeologo = UserLogon.CodigoGeologo;
                    litologia.CodigoTipoContacto = objLito.CodigoTipoContacto;
                    litologia.FechaAnalisis = Convert.ToDateTime(DateTime.Now);

                    #region Detalles
                    //Agrega detalles Alteraciones de Litologia
                    listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                    if (listaAlteraciones != null)
                    {
                        List<LitologiaAlteraciones> litologiasAlteraciones = new List<LitologiaAlteraciones>();
                        foreach (var item in listaAlteraciones)
                        {
                            LitologiaAlteraciones detalle = new LitologiaAlteraciones()
                            {
                                Orden = item.Orden,
                                CodigoGradoFracturacion = item.CodigoGradoFracturacion,
                                CodigoSondaje = objLito.CodigoSondaje,
                                CodigoLitologia = objLito.CodigoLitologia,
                                CodigoTipoAlteracionLitologica = item.CodigoTipoAlteracionLitologica
                            };
                            litologiasAlteraciones.Add(detalle);
                        }
                        litologia.LitologiaAlteraciones = litologiasAlteraciones.ToArray();
                    }

                    listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                    if (listaMinerales != null)
                    {

                        List<LitologiaMinerales> litologiaMinerales = new List<LitologiaMinerales>();
                        foreach (var item in listaMinerales)
                        {
                            LitologiaMinerales detalle = new LitologiaMinerales()
                            {
                                Orden = item.Orden,
                                CodigoMineral = item.CodigoMineral,
                                CodigoSondaje = objLito.CodigoSondaje,
                                CodigoLitologia = objLito.CodigoLitologia,
                                CodigoMineralCantidad = item.CodigoMineralCantidad,
                                CodigoMineralTextura = item.CodigoMineralTextura
                            };
                            litologiaMinerales.Add(detalle);
                        }
                        litologia.LitologiaMinerales = litologiaMinerales.ToArray();
                    }

                    #endregion

                    //Modificado por Edgar, el resultado verifica si todo está ok
                    string result = string.Empty;
                    using (SELitologiaClient proxy = new SELitologiaClient())
                    {
                        result = proxy.InsertarLitologia(litologia);
                    }

                    if (result.CompareTo("Registrado") != 0)
                    {
                        retorno.result = 0;
                        retorno.message = result;
                        flag_exito = false;
                    }
                    else
                    {
                        Session.Remove(SESSION_ALTERACIONES);
                        Session.Remove(SESSION_MINERALES);
                        retorno.result = 1;
                        retorno.message = Constantes.MensajeLitologia.MSG_INSERT_OK;
                    }
                }


            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:Create", this.UserLogon.CodigoUsuario, ex);
            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        //GET: /Litologia
        /// <summary>
        /// método para obtener codigo litologia
        /// </summary>
        /// <param name="idSondaje"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public JsonResult Edit(int idSondaje, string id)
        {
            Resultado retorno = new Resultado();
            // Sondaje obj=null;


            try
            {
                //codigo muestra
                using (var proxy = new SELitologiaClient())
                {
                    var obj = proxy.ObtenerLitologia(idSondaje, id);

                    if (obj != null)
                    {
                        using (var proxyGeo = new SEGeologoClient())
                        {
                            obj.Geologo = proxyGeo.ObtenerGeologo(Convert.ToInt32(obj.CodigoGeologo));
                        }

                        //Obtengo los detalles tipo alteracion
                        using (SELitologiaAlteracionesClient proxyAlt = new SELitologiaAlteracionesClient())
                        {
                            //Modificado por Edgar
                            listaAlteraciones = proxyAlt.BuscarLitologiaAlteraciones(idSondaje, id).ToList();
                            Session[SESSION_ALTERACIONES] = listaAlteraciones;
                        }

                        using (SELitologiaMineralesClient proxyMin = new SELitologiaMineralesClient())
                        {
                            //Modificado por Edgar
                            listaMinerales = proxyMin.BuscarLitologiaMinerales(idSondaje, id).ToList();
                            Session[SESSION_MINERALES] = listaMinerales;
                        }

                        retorno.result = 1;
                        retorno.message = "OK";
                        retorno.data = Json(obj, JsonRequestBehavior.AllowGet);
                    }

                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:Editar", this.UserLogon.CodigoUsuario, ex);

            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        //POST: /Muestra /Edit/5
        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                //TODO: Add update logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //POST /Litologia/ACTUALIZAR
        [HttpPost]
        public JsonResult Modificar(Litologia entidad)
        {
            Resultado retorno = new Resultado();
            try
            {
                bool flag_exito = true;

                //Modificado por Edgar, la validación debe ser unico para insertar y modificar
                StringBuilder sb = new StringBuilder();
                if (!this.Validar(entidad, ref sb))
                {
                    retorno.result = 0;
                    retorno.message = sb.ToString();
                    flag_exito = false;
                }
                
                var objLito = entidad;
                if (flag_exito)
                {
                    Litologia litologia = new Litologia()
                    {
                        CodigoSondaje = objLito.CodigoSondaje,
                        CodigoLitologia = objLito.CodigoLitologia,
                        Desde = objLito.Desde,
                        Hasta = objLito.Hasta,
                        Descripcion = objLito.Descripcion,
                        Angulo = objLito.Angulo,
                        InterpretaTipoAlteracion = objLito.InterpretaTipoAlteracion == null ? string.Empty : objLito.InterpretaTipoAlteracion,
                        InterpretaCantidadMineral = objLito.InterpretaCantidadMineral == null ? string.Empty : objLito.InterpretaCantidadMineral,
                        InterpretaGradoAlteracion = objLito.InterpretaGradoAlteracion == null ? string.Empty : objLito.InterpretaGradoAlteracion,
                        InterpretaMinerales = objLito.InterpretaMinerales == null ? string.Empty : objLito.InterpretaMinerales,
                        InterpretaTexturaMineral = objLito.InterpretaTexturaMineral == null ? string.Empty : objLito.InterpretaTexturaMineral,
                        CodigoTipoRoca = objLito.CodigoTipoRoca,
                        CodigoTipoRocaFracturacion = objLito.CodigoTipoRocaFracturacion,
                        CodigoTexturaRoca = objLito.CodigoTexturaRoca,
                        CodigoColorRoca = objLito.CodigoColorRoca,
                        CodigoGeologo = UserLogon.CodigoGeologo,
                        CodigoTipoContacto = objLito.CodigoTipoContacto,
                        FechaAnalisis = DateTime.Now
                    };
                    #region Detalles
                    //Agrega detalles Alteraciones de Litologia
                    listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                    if (listaAlteraciones != null)
                    {
                        List<LitologiaAlteraciones> litologiasAlteraciones = new List<LitologiaAlteraciones>();
                        foreach (var item in listaAlteraciones)
                        {
                            LitologiaAlteraciones detalle = new LitologiaAlteraciones() { Orden = item.Orden, CodigoGradoFracturacion = item.CodigoGradoFracturacion, CodigoSondaje = objLito.CodigoSondaje, CodigoLitologia = objLito.CodigoLitologia, CodigoTipoAlteracionLitologica = item.CodigoTipoAlteracionLitologica };
                            litologiasAlteraciones.Add(detalle);
                        }
                        litologia.LitologiaAlteraciones = litologiasAlteraciones.ToArray();
                    }
                    listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                    if (listaMinerales != null)
                    {
                        List<LitologiaMinerales> litologiaMinerales = new List<LitologiaMinerales>();
                        foreach (var item in listaMinerales)
                        {
                            LitologiaMinerales detalle = new LitologiaMinerales() { Orden = item.Orden, CodigoMineral = item.CodigoMineral, CodigoSondaje = objLito.CodigoSondaje, CodigoLitologia = objLito.CodigoLitologia, CodigoMineralCantidad = item.CodigoMineralCantidad, CodigoMineralTextura = item.CodigoMineralTextura };
                            litologiaMinerales.Add(detalle);
                        }
                        litologia.LitologiaMinerales = litologiaMinerales.ToArray();
                    }

                    #endregion

                    //Modificado por Edgar, el resultado verifica si todo está ok
                    string result = string.Empty;
                    using (SELitologiaClient proxy = new SELitologiaClient())
                    {
                        result = proxy.ModificarLitologia(litologia);
                    }

                    if (result.CompareTo("Registrado") != 0)
                    {
                        retorno.result = 0;
                        retorno.message = result;
                        flag_exito = false;
                    }
                    else
                    {
                        Session.Remove(SESSION_ALTERACIONES);
                        Session.Remove(SESSION_MINERALES);
                        retorno.result = 1;
                        retorno.message = Constantes.MensajeLitologia.MSG_EDIT_OK;
                    }
                }

            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:Modificar", this.UserLogon.CodigoUsuario, ex);
            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        //

        //GET: /Litologia

        public ActionResult Delete(int id)
        {
            return View();
        }

        //POST: /Muestra/Delete/5
        [HttpPost]
        public JsonResult Delete(int idSondaje, string id)
        {
            Resultado retorno = new Resultado();
            // Sondaje obj=null;


            try
            {
                //codigo muestra
                using (var proxy = new SELitologiaClient())
                {
                    proxy.EliminarLitologia(idSondaje, id);

                    retorno.result = 1;
                    retorno.message = "OK";


                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:Delete", this.UserLogon.CodigoUsuario, ex);

            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }


        [HttpPost]
        public JsonResult GenerarInterpretacion(int opcion)
        {


            Resultado retorno = new Resultado();
            retorno.result = 1;
            retorno.code = opcion;
            try
            {

                string interpretacionTipoAlteracion = string.Empty;
                string interpretacionGradoFracturacion = string.Empty;
                string interpretacionMinerales = string.Empty;
                string interpretacionCantidadMineral = string.Empty;
                string interpretacionTexturaMineral = string.Empty;

                if (opcion == 0)
                {
                    //Alteraciones
                    if (Session[SESSION_ALTERACIONES] != null)
                    {
                        listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                        List<int> alteraciones = listaAlteraciones.Select(x => x.CodigoTipoAlteracionLitologica).ToList();
                        foreach (var item in alteraciones)
                        {
                            using (SETipoAlteracionLitologicaClient proxy = new SETipoAlteracionLitologicaClient())
                            {
                                var entidad = proxy.ObtenerTipoAlteracionLitologica(item);
                                if (entidad != null)
                                    interpretacionTipoAlteracion = interpretacionTipoAlteracion + entidad.Abreviatura + ",";
                            }
                        }
                        List<int> gradoFracturaciones = listaAlteraciones.Select(x => x.CodigoGradoFracturacion).ToList();
                        foreach (var item in gradoFracturaciones)
                        {
                            using (SEGradoFracturacionClient proxy = new SEGradoFracturacionClient())
                            {
                                var entidad = proxy.ObtenerGradoFracturacion(item);
                                if (entidad != null)
                                    interpretacionGradoFracturacion = interpretacionGradoFracturacion + entidad.Abreviatura + ",";
                            }
                        }
                    }
                    retorno.data = Json(new InterpretacionAlteracion
                    {
                        Tipo = interpretacionTipoAlteracion,
                        Grado = interpretacionGradoFracturacion
                    }, JsonRequestBehavior.AllowGet);
                }
                else
                {
                    //Minerales
                    if (Session[SESSION_MINERALES] != null)
                    {
                        listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                        List<int> minerales = listaMinerales.Select(x => x.CodigoMineral).ToList();
                        foreach (var item in minerales)
                        {
                            using (SEMineralClient proxy = new SEMineralClient())
                            {
                                var entidad = proxy.ObtenerMineral(item);
                                if (entidad != null)
                                    interpretacionMinerales = interpretacionMinerales + entidad.Abreviatura + ",";
                            }
                        }

                        List<int> cantidadMinerales = listaMinerales.Select(x => x.CodigoMineralCantidad).ToList();
                        foreach (var item in cantidadMinerales)
                        {
                            using (SEMineralCantidadClient proxy = new SEMineralCantidadClient())
                            {
                                var entidad = proxy.ObtenerMineralCantidad(item);
                                if (entidad != null)
                                    interpretacionCantidadMineral = interpretacionCantidadMineral + entidad.Abreviatura + ",";
                            }
                        }

                        List<int> texturaMinerales = listaMinerales.Select(x => x.CodigoMineralTextura).ToList();
                        foreach (var item in texturaMinerales)
                        {
                            using (SEMineralTexturaClient proxy = new SEMineralTexturaClient())
                            {
                                var entidad = proxy.ObtenerMineralTextura(item);
                                if (entidad != null)
                                    interpretacionTexturaMineral = interpretacionTexturaMineral + entidad.Abreviatura + ",";
                            }
                        }
                    }

                    retorno.data = Json(new InterpretacionMineral
                    {
                        Mineral = interpretacionMinerales,
                        Textura = interpretacionTexturaMineral,
                        Cantidad = interpretacionCantidadMineral
                    }, JsonRequestBehavior.AllowGet);
                }


            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = String.Format("Ocurrió un error.{0}", ex.Message);
                Logger.Error("Litologia Controller:Generar Interpretación", this.UserLogon.CodigoUsuario, ex);
            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }
        //public ActionResult CerrarPopUp()
        //{
        //    Session.Remove(SESSION_ALTERACIONES);
        //    Session.Remove(SESSION_MINERALES);
        //    return View();
        //}

        public JsonResult ListItem(int intCodigoSondaje)
        {

            using (SELitologiaClient proxy = new SELitologiaClient())
            {
                var litologia = proxy.ObtenerListItem(intCodigoSondaje);
                return Json(litologia, JsonRequestBehavior.AllowGet);
            }


        }

        public JsonResult Finalizar(int idSondaje)
        {
            Resultado retorno = new Resultado();
            // Sondaje obj=null;

            try
            {
                //codigo litologia
                string result = string.Empty;
                using (var proxy = new SESondajeClient())
                {
                    result = proxy.FinalizarCumplimiento(idSondaje, enmTipoAnalisis.Litologia.GetHashCode());

                }
                if (result.CompareTo("Cumplido") != 0)
                {
                    retorno.result = 0;
                    retorno.message = result;
                }
                else
                {
                    retorno.result = 1;
                    retorno.message = Constantes.MensajeLitologia.MSG_FINALIZAR_OK;
                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = String.Format("Ocurrió un Error{0}", ex.Message);
                Logger.Error("Litologia Controller:Finalizar", this.UserLogon.CodigoUsuario, ex);
            }

            return Json(retorno, JsonRequestBehavior.AllowGet);

        }

        [HttpPost]
        public JsonResult obtenerHasta(int idSondaje)
        {
            double hasta = 0.00;
            try
            {

                using (var proxyHasta = new SELitologiaClient())
                {
                    var datoHasta = proxyHasta.ObtenerUltimoHasta(idSondaje);
                    hasta = datoHasta;
                }

            }
            catch (Exception ex)
            {
                throw ex;

            }

            return Json(hasta, JsonRequestBehavior.AllowGet);
        }

        /// <summary>
        /// ACTION PARA REEMPLAZAR LA GRILLA ALTERACION POR TEMA DE COMPATIBILIDAD - DTM 17072014
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public JsonResult ListarAlteracionHtml(string idGrid)
        {
            Resultado retorno = new Resultado();
            StringBuilder sb = new StringBuilder();
            try
            {
                listaAlteraciones = (List<LitologiaAlteracionesResponse>)Session[SESSION_ALTERACIONES];
                sb.Append("<div class='k-grid-content' style='height: 118px;'>");
                sb.Append("<table class='k-grid k-widget' style='width: 100%;' >");
                sb.Append("<tr class='k-grid-header'><th class='k-header'>Tipo Alteración</th><th class='k-header'>Grado Alteración</th><th class='k-header'>&nbsp;</th></tr>");
                if (listaAlteraciones != null)
                {
                    int i = 0;
                    string alt = "";
                    foreach (var item in listaAlteraciones)
                    {
                        if (i % 2 == 1)
                            alt = " class='k-alt' ";
                        else
                            alt = "";
                        sb.AppendFormat("<tr {0} ><td>{1}</td><td>{2}</td>", alt, item.DescripcionTipoAlteracion, item.DescripcionGradoFracturacion);
                        string idGrilla = idGrid;// item.Orden == 0 ? "#gridAlteracion" : "#gridAlteracionEdit";
                        sb.AppendFormat("<td><a class='k-button k-button-icontext k-grid-delete' href=javascript:delAlteracionHtml('{0}','{1}'); > <span class='k-icon k-delete'></span>Delete</a></td></tr>", item.Orden, idGrilla);
                        i++;
                    }

                }
                sb.Append("</table>");
                sb.Append("</div>");
                retorno.result = 1;
                retorno.message = sb.ToString();
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:ListarAlteracionHtml", this.UserLogon.CodigoUsuario, ex);

            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }
        /// <summary>
        /// ACTION PARA REEMPLAZAR LA GRILLA MINERAL POR TEMA DE COMPATIBILIDAD - DTM 17072014
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public JsonResult ListarMineralHtml(string idGrid)
        {
            Resultado retorno = new Resultado();
            StringBuilder sb = new StringBuilder();
            try
            {
                listaMinerales = (List<LitologiaMineralesResponse>)Session[SESSION_MINERALES];
                sb.Append("<div class='k-grid-content' style='height: 118px;'>");
                sb.Append("<table class='k-grid k-widget' style='width: 100%;' >");
                sb.Append("<tr class='k-grid-header'><th class='k-header'>Mineral</th><th class='k-header'>Cantidad</th><th class='k-header'>Textura</th><th class='k-header'>&nbsp;</th></tr>");
                if (listaMinerales != null)
                {
                    int i = 0;
                    string alt = "";
                    foreach (var item in listaMinerales)
                    {
                        if (i % 2 == 1)
                            alt = " class='k-alt' ";
                        else
                            alt = "";
                        sb.AppendFormat("<tr {0} ><td>{1}</td><td>{2}</td><td>{3}</td>", alt, item.DescripcionMineral, item.DescripcionMineralCantidad, item.DescripcionMineralTextura);
                        string idGrilla = idGrid;// item.Orden == 0 ? "#gridMineral" : "#gridMineralEdit";
                        sb.AppendFormat("<td><a class='k-button k-button-icontext k-grid-delete' href=javascript:delMineralHtml('{0}','{1}'); > <span class='k-icon k-delete'></span>Delete</a></td></tr>", item.Orden, idGrilla);
                        i++;
                    }

                }
                sb.Append("</table>");
                sb.Append("</div>");
                retorno.result = 1;
                retorno.message = sb.ToString();
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = ex.Message;
                Logger.Error("Litologia Controller:ListarMineralHtml", this.UserLogon.CodigoUsuario, ex);

            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }
    }
}
